package day_2022_7_to_8.day48;

import java.util.HashSet;
import java.util.Set;

/**
 * @author haomin
 * @date 2022/08/20 09:17
 **/
public class Day35_1_Num73_SetZeroes {
    class Solution {
        public void setZeroes(int[][] matrix) {
            Set<Integer> iSet = new HashSet<>(); // 记录有0的行
            Set<Integer> jSet = new HashSet<>(); // 记录有0的列

            for(int i = 0; i < matrix.length; ++i){
                for(int j = 0; j < matrix[0].length; ++j){
                    if(matrix[i][j] == 0) {iSet.add(i);jSet.add(j);}
                }
            }
            for (Integer i : iSet) { // 行置0
                for(int j = 0; j < matrix[0].length; ++j) matrix[i][j] = 0;
            }
            for (Integer j : jSet) { // 列置0
                for (int i = 0; i < matrix.length; ++i) matrix[i][j] = 0;
            }
        }
    }
    class Solution2 {
        public void setZeroes(int[][] matrix) {
            int m = matrix.length, n = matrix[0].length;
            // col0记录首列是否出现0, row0记录首行是否出现0
            boolean row0 = false, col0 = false;
            for(int i = 0; i < m; ++i) if(matrix[i][0] == 0) col0 = true;
            for(int j = 0; j < n; ++j) if(matrix[0][j] == 0) row0 = true;
            for(int i = 0; i < m; ++i){
                for(int j = 0; j < n; ++j){
                    if(matrix[i][j] == 0) {
                        matrix[i][0] = 0;matrix[0][j] = 0;
                    }
                }
            }
            for(int i = 1; i < m; ++i){
                for(int j = 1; j < n; ++j){
                    if(matrix[i][0] == 0 || matrix[0][j] == 0)
                        matrix[i][j] = 0;
                }
            }
            if(col0) {  // 若首列出现0，则首列全置0
                for(int i = 0; i < m; ++i) matrix[i][0] = 0;
            }
            if(row0) {  // 若首行出现0，则首行全置0
                for(int j = 0; j < n; ++j) matrix[0][j] = 0;
            }
        }
    }
}